/**
 * 通用通知系统类型定义
 * 支持多种通知类型和使用场景
 */

import React from 'react';

// 通知类型枚举
export type NotificationType = 
  | 'progress'      // 进度通知（如文件上传、数据处理）
  | 'status'        // 状态通知（如系统状态、连接状态）
  | 'info'          // 信息通知（如提示、说明）
  | 'warning'       // 警告通知（如注意事项、风险提示）
  | 'error'         // 错误通知（如操作失败、系统错误）
  | 'success'       // 成功通知（如操作完成、任务成功）
  | 'monitoring'    // 监控通知（如系统监控、性能监控）
  | 'sync'          // 同步通知（如数据同步、备份任务）
  | 'task'          // 任务通知（如后台任务、定时任务）
  | 'upload'        // 上传通知（如文件上传、批量上传）
  | 'download'      // 下载通知（如文件下载、数据导出）
  | 'maintenance';  // 维护通知（如系统维护、更新通知）

// 通知状态枚举
export type NotificationStatus = 
  | 'idle'          // 空闲状态
  | 'running'       // 运行中
  | 'success'       // 成功
  | 'error'         // 错误
  | 'warning'       // 警告
  | 'paused'        // 暂停
  | 'cancelled'     // 已取消
  | 'completed'     // 已完成
  | 'failed'        // 失败
  | 'pending'       // 等待中
  | 'retrying';     // 重试中

// 通知显示模式
export type NotificationDisplayMode = 
  | 'compact'       // 紧凑模式（默认）
  | 'expanded'      // 展开模式
  | 'adaptive';     // 自适应模式

// 通知阶段
export type NotificationPhase = 
  | 'initial'       // 初始阶段（刚创建）
  | 'transitioning' // 过渡阶段（动画中）
  | 'persistent'    // 持久阶段（显示在头部）
  | 'closed';       // 已关闭

// 通知位置
export interface NotificationPosition {
  x: number;
  y: number;
}

// 通知操作按钮
export interface NotificationAction {
  label: string;
  action: () => void;
  type?: 'primary' | 'default' | 'danger' | 'ghost';
  icon?: React.ReactNode;
  disabled?: boolean;
  loading?: boolean;
}

// 进度信息
export interface ProgressInfo {
  current: number;          // 当前进度 (0-100)
  total?: number;           // 总数
  processed?: number;       // 已处理数量
  remaining?: number;       // 剩余数量
  speed?: number;           // 处理速度（每秒）
  estimatedTime?: number;   // 预计剩余时间（秒）
  unit?: string;            // 单位（如 'MB', '个', '条'）
}

// 统计信息
export interface StatisticsInfo {
  [key: string]: number | string;
}

// 错误信息
export interface ErrorInfo {
  code?: string;
  message: string;
  details?: string;
  stack?: string;
  retryable?: boolean;
  retryCount?: number;
  maxRetries?: number;
}

// 通知显示策略
export type NotificationDisplayStrategy =
  | 'dynamic-island'    // 显示在Dynamic Island中
  | 'ant-notification'  // 仅显示ant-notification
  | 'both'              // 两者都显示
  | 'auto';             // 自动决定

// 通知配置
export interface NotificationConfig {
  autoClose?: boolean;      // 是否自动关闭
  autoCloseDelay?: number;  // 自动关闭延迟（毫秒）
  persistent?: boolean;     // 是否持久化到头部
  showProgress?: boolean;   // 是否显示进度条
  showActions?: boolean;    // 是否显示操作按钮
  showTimestamp?: boolean;  // 是否显示时间戳
  showDuration?: boolean;   // 是否显示持续时间
  allowDismiss?: boolean;   // 是否允许手动关闭
  displayMode?: NotificationDisplayMode; // 显示模式
  displayStrategy?: NotificationDisplayStrategy; // 显示策略
  maxWidth?: number;        // 最大宽度
  priority?: number;        // 优先级（数字越大优先级越高）
  antNotificationDuration?: number; // ant-notification显示时长（秒）
  transitionDelay?: number; // 过渡到Dynamic Island的延迟（毫秒）
}

// 主题配置
export interface NotificationTheme {
  primaryColor?: string;
  backgroundColor?: string;
  textColor?: string;
  borderColor?: string;
  shadowColor?: string;
  borderRadius?: number;
  fontSize?: number;
  fontFamily?: string;
}

// 动画配置
export interface AnimationConfig {
  duration?: number;        // 动画持续时间
  easing?: string;          // 缓动函数
  enableBounce?: boolean;   // 是否启用弹跳效果
  enablePulse?: boolean;    // 是否启用脉冲效果
  enableBreathing?: boolean; // 是否启用呼吸效果
}

// 回调函数类型
export interface NotificationCallbacks {
  onStart?: (id: string) => void;
  onProgress?: (id: string, progress: ProgressInfo) => void;
  onComplete?: (id: string, result?: any) => void;
  onError?: (id: string, error: ErrorInfo) => void;
  onCancel?: (id: string) => void;
  onPause?: (id: string) => void;
  onResume?: (id: string) => void;
  onRetry?: (id: string) => void;
  onDismiss?: (id: string) => void;
}

// 核心通知接口
export interface UniversalNotification {
  id: string;
  type: NotificationType;
  status: NotificationStatus;
  title: string;
  description?: string;
  message?: string;
  
  // 进度相关
  progress?: number; // 简单的数字进度值（0-100），用于UI显示
  progressInfo?: ProgressInfo; // 详细的进度信息对象
  
  // 时间相关
  startTime: number;
  lastUpdate: number;
  endTime?: number;
  duration?: number;
  
  // 数据相关
  data?: any;
  statistics?: StatisticsInfo;
  error?: ErrorInfo;
  
  // 交互相关
  actions?: NotificationAction[];
  callbacks?: NotificationCallbacks;
  
  // 配置相关
  config?: NotificationConfig;
  theme?: NotificationTheme;
  animation?: AnimationConfig;
  
  // 显示相关
  icon?: React.ReactNode;
  image?: string;
  badge?: string | number;
  
  // 元数据
  category?: string;
  tags?: string[];
  source?: string;
  target?: string;
  metadata?: Record<string, any>;
}

// 通知状态
export interface NotificationState {
  notification: UniversalNotification;
  phase: NotificationPhase;
  position: NotificationPosition;
  isExpanded: boolean;
  isVisible: boolean;
  zIndex: number;
}

// 通知管理器接口
export interface NotificationManager {
  // 基础操作
  add: (notification: Omit<UniversalNotification, 'id' | 'startTime' | 'lastUpdate'>) => string;
  update: (id: string, updates: Partial<UniversalNotification>) => void;
  remove: (id: string) => void;
  clear: () => void;
  
  // 状态管理
  get: (id: string) => NotificationState | undefined;
  getAll: () => NotificationState[];
  getByType: (type: NotificationType) => NotificationState[];
  getByStatus: (status: NotificationStatus) => NotificationState[];
  
  // 显示控制
  show: (id: string) => void;
  hide: (id: string) => void;
  expand: (id: string) => void;
  collapse: (id: string) => void;
  
  // 阶段控制
  transitionToHeader: (id: string) => void;
  transitionToNormal: (id: string) => void;
  
  // 批量操作
  pauseAll: () => void;
  resumeAll: () => void;
  clearCompleted: () => void;
  clearByType: (type: NotificationType) => void;
}

// 预设通知模板类型
export interface NotificationTemplate {
  type: NotificationType;
  title: string;
  description?: string;
  config?: NotificationConfig;
  theme?: NotificationTheme;
  animation?: AnimationConfig;
}

// 通知模板库
export interface NotificationTemplates {
  fileUpload: NotificationTemplate;
  fileDownload: NotificationTemplate;
  dataSync: NotificationTemplate;
  dataProcessing: NotificationTemplate;
  systemMaintenance: NotificationTemplate;
  backup: NotificationTemplate;
  export: NotificationTemplate;
  import: NotificationTemplate;
  analysis: NotificationTemplate;
  monitoring: NotificationTemplate;
}
